CMake 操作编译器
定义编译器 标志
target_compile_definitions 是 CMake 中的一个命令,用于为特定的目标(如可执行文件或库)定义编译器标志。
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE __JNI__)
例如上面的代码,__JNI__ 就是一个宏定义,这样在代码中就可以使用 #ifdef __JNI__ 来判断是否定义了这个宏。
在一些情况下,我们需要根据不同的编译器来定义不同的宏,这时候我们可以使用 if 语句来判断编译器类型,然后定义不同的宏。
if (OCR_OUTPUT STREQUAL "JNI") # JNI
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE __JNI__)
elseif (OCR_OUTPUT STREQUAL "CLIB") # CLIB
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE __CLIB__)
elseif (OCR_OUTPUT STREQUAL "BIN") # BIN
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE __EXEC__)
elseif(OCR_OUTPUT STREQUAL "PYBIND") # PYBIND
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE __PYBIND__)
endif ()
如上面的代码,我们根据 OCR_OUTPUT 的值来定义不同的宏。使用 cmake 时,我们可以通过 -D 选项来定义宏,例如:
cmake -D OCR_OUTPUT=JNI ..
这样就可以根据不同的编译器来定义不同的宏。